package com.byl.modules.core.service.impl;

import com.byl.modules.core.dao.PartnerDao;
import com.byl.modules.core.service.PartnerService;
import com.byl.modules.sys.dao.UserDao;
import com.byl.sdk.bean.ResultBean;
import com.byl.sdk.utils.InviteCodeUtils;
import com.byl.sdk.utils.MapUtils;
import com.byl.sdk.utils.PageMap;
import com.byl.sdk.utils.UUIDUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.sound.midi.Soundbank;
import java.util.List;
import java.util.Map;

@Service
@Transactional
public class PartnerServiceImpl implements PartnerService {

    @Autowired
    UserDao userDao;

    @Autowired
    PartnerDao partnerDao;



    @Override
    public ResultBean query(Map map) {
        PageMap pageMap=new PageMap(map);
        //判断请求中是否含有status
        if (pageMap.containsKey("status")){
            //说明用户没有传了status  我们设一个默认值
            pageMap.put("status",1);

        }
        List list= partnerDao.query(pageMap);
        int total=partnerDao.queryCount(pageMap);
        return new ResultBean(pageMap.getPage(),pageMap.getPageSize(),total,list);
    }

    @Override
    public int audit(Map map) {
        return partnerDao.audit(map);
    }

    @Override
    public Map statistics() {
        return null;
    }

    @Override
    public int updatetype(Map map) {
        return 0;
    }

    @Override
    public int register(Map map) {
        //根据邀请码 获取邀请人信息
        Map tmp = partnerDao.queryPartnerByInviteCode(MapUtils.getValue(map,"inviteCode"));
        if (null == tmp) {
            //说明邀请码没有对应的合伙人
            return -1;
        }
        //生成合伙人id
        String id = UUIDUtils.generateUUID();
        map.put("id", id);
        map.put("sex", 3);
        map.put("email", "");
        map.put("roles", "");
        map.put("usertype", 2);//合伙人
        map.put("status",2);//待审核状态
        //保存用户
        int rs = userDao.saveUser(map);
        if (rs > 0) {
            //添加邀请人
            map.put("userId", MapUtils.getValue(tmp,"uesrId"));
            //生成当前合伙人自己的邀请码
            map.put("inviteCode",getInviteCode());
            //生成自己的编码
            map.put("coding",generateCoding(MapUtils.getValue(tmp,"coding")));

            //保存合伙人
            rs = partnerDao.save(map);
        }
        return rs;
    }


private  String generateCoding(String coding){
        //获取当前编码 的最大子编码
    String tmp=partnerDao.queryMaxChildInviteCode(coding);
    if(null==tmp) {
        return coding + "001";
    }else{
        //获取当前编码长度
        int len=coding.length();
        //判断当前最大编码是否是coding的子编码
        if(tmp.length()>len){
            //1001010...
            //获当前最大编码coding的后三位
            String cur=tmp.substring(len,len+3);
            //将cur转换为数字
            int num=Integer.parseInt(cur);
            num++;
            //将num转换为三位数与coding组合012
            return coding+String.format("%03d",num);
        }else{
            return coding + "001";
        }


    }
}
        public static void main(String[] args){
            System.out.println(String.format("%03d",100));

        }


    /**
     * 获得邀请码
     * @return
     */
    private String getInviteCode() {
        String coding = null;
        boolean flag = true;
        while (flag) {
            //产生邀请码
            coding= InviteCodeUtils.generateInviteCode();
            //验证邀请码
            int rs=partnerDao.validateInviteCode(coding);
            if (rs==0){
                //说明可以使用 结束循环
                flag = false;
        }
    }
    return coding;
}





}
